// 额外属性检查
interface SquareConfig {
    color?: string,
    width?: number,
    [propName: string]: any
}

function createSquare2(config: SquareConfig): { color: string; area: number } {
    let newSquare = { color: "white", area: 100 };
    if (config.color) {
        newSquare.color = config.color;
    }
    if (config.width) {
        newSquare.area = config.width * config.width;
    }
    return newSquare;
}

// 注意：传入的属性是 colour 而不是 color
// let mySquare2 = createSquare2({ colour: "red", width: 100 });
// 最简单的方法是使用类型断言
let mySquare2 = createSquare2({ width: 100, opacity: 0.5 } as SquareConfig)

// 最佳方案是修改接口，指定 SquareConfig 除了 color 和 width 属性之外，还可能包含任意类型的 其他属性
// 修改之后调用
let squareOptions = { colour: "red", width: 100 };
let mySquare3 = createSquare(squareOptions);